// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Stage Menu Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 7 : TYPE_STAGEMENU

// Function declarations
reserve function StageMenu_Function2

// Static Values
public value StageMenu_value3 = 0;

// Tables
public table StageMenu_table3
	0, 3, 6, 9, 12, 15, 18
end table


function StageMenu_Function2
	object[10].xpos = -108
	object[10].xpos *= object.scale
	object[10].xpos >>= 8
	object[14].xpos = object[10].xpos
	object[11].xpos = -36
	object[11].xpos *= object.scale
	object[11].xpos >>= 8
	object[15].xpos = object[11].xpos
	object[12].xpos = 36
	object[12].xpos *= object.scale
	object[12].xpos >>= 8
	object[16].xpos = object[12].xpos
	object[13].xpos = 108
	object[13].xpos *= object.scale
	object[13].xpos >>= 8
	object[17].xpos = object[13].xpos
	object[10].ypos = -48
	object[10].ypos *= object.scale
	object[10].ypos >>= 8
	object[11].ypos = object[10].ypos
	object[12].ypos = object[10].ypos
	object[13].ypos = object[10].ypos
	object[14].ypos = 8
	object[14].ypos *= object.scale
	object[14].ypos >>= 8
	object[15].ypos = object[14].ypos
	object[16].ypos = object[14].ypos
	object[17].ypos = object[14].ypos
end function


event ObjectMain
	switch object.state
	case 0
		if engine.deviceType == RETRO_STANDARD
			options.physicalControls = 1
			object.value3 = 1
		end if
		object.scale = 256
		arrayPos0 = 10
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 1, -108, -48)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 2, -36, -48)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 3, 36, -48)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 4, 108, -48)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 5, -108, 8)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 6, -36, 8)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 7, 36, 8)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		SetClassicFade(0, 0, 0, 255)
		object.value0 = 384
		options.stageSelectFlag = 0
		object.state = 1
		break
	case 1
		if object.value0 > 0
			object.value0 -= 16
			SetClassicFade(0, 0, 0, object.value0)
		else
			object.state = 3
		end if
		break
	case 3
		if options.physicalControls == 0
			if object.state != 4
				object.value3 = 0
				if inputPress.left == 1
					options.physicalControls = 1
					object.value3 = 12
				end if
				if inputPress.right == 1
					options.physicalControls = 1
					object.value3 = 1
				end if
				if inputPress.up == 1
					options.physicalControls = 1
					object.value3 = 9
				end if
				if inputPress.down == 1
					options.physicalControls = 1
					object.value3 = 1
				end if
			end if
		else
			if inputPress.left == 1
				object.value3--
				if object.value3 < 1
					object.value3 = 7
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.right == 1
				object.value3++
				if object.value3 > 7
					object.value3 = 1
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.up == 1
				object.value3 -= 4
				if object.value3 < 1
					object.value3 += 8
					if object.value3 == 8
						object.value3 = 4
					end if
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.down == 1
				object.value3 += 4
				if object.value3 > 7
					object.value3 -= 8
					if object.value3 == 8
						object.value3 = 4
					end if
					if object.value3 == 0
						object.value3 = 4
					end if
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.start == 1
				arrayPos0 = object.value3
				arrayPos0 += 9
				if object[arrayPos0].value2 == 0
					object.state = 4
					PlaySfx(SfxName[Menu Select], 0)
				else
					PlaySfx(SfxName[Jump], 0)
				end if
			end if
			if inputPress.buttonA == 1
				arrayPos0 = object.value3
				arrayPos0 += 9
				if object[arrayPos0].value2 == 0
					object.state = 4
					PlaySfx(SfxName[Menu Select], 0)
				else
					PlaySfx(SfxName[Jump], 0)
				end if
			end if
		end if
		break
	case 4
		if object.scale > 0
			object.scale -= 8
		end if
		object[10].alpha = object.scale
		object[11].alpha = object.scale
		object[12].alpha = object.scale
		object[13].alpha = object.scale
		object[14].alpha = object.scale
		object[15].alpha = object.scale
		object[16].alpha = object.scale
		object[10].drawOrder = 3
		object[11].drawOrder = 3
		object[12].drawOrder = 3
		object[13].drawOrder = 3
		object[14].drawOrder = 3
		object[15].drawOrder = 3
		object[16].drawOrder = 3
		arrayPos0 = object.value3
		arrayPos0 += 9
		object[arrayPos0].alpha = 256
		object[arrayPos0].drawOrder = 4
		arrayPos0 = object.value3
		arrayPos0 += 9
		CallFunction(StageMenu_Function2)
		if object.value4 < 32
			object.value4++
		else
			object.value4 = 0
			object.state = 5
		end if
		break
	case 5
		arrayPos0 = object.value3
		arrayPos0 += 9
		if object[arrayPos0].value1 < 224
			object[arrayPos0].value1 += 8
		else
			object.value0 = -640
			object.state = 6
		end if
		break
	case 6
		if object.value0 < 256
			music.volume -= 10
			object.value0 += 16
			if object.value0 > 0
				SetClassicFade(0, 0, 0, object.value0)
			end if
		else
			StopMusic()
			player.score = 0
			player.scoreBonus = 0xC350
			stage.activeList = REGULAR_STAGE
			temp0 = object.value3
			temp0--
			GetTableValue(stage.listPos, temp0, StageMenu_table3)
			player.lives = StageMenu_value3
			LoadStage()
			SetClassicFade(0, 0, 0, 255)
		end if
		break
	case 7
		if object.value0 < 256
			music.volume -= 10
			object.value0 += 16
			SetClassicFade(0, 0, 0, object.value0)
		else
			StopMusic()
			engine.state = 8
			SetClassicFade(0, 0, 0, 255)
		end if
		break
	end switch
	
	
	if inputPress.buttonB == 1
		
		options.gameMode = 0
		stage.playerListPos = 0

		options.attractMode = 0
		player.lives = 3
		player.continues = 0
		player.score = 0
		player.scoreBonus = 0xC350
		lampPostID = 0
		specialStage.listPos = 0
		specialStage.emeralds = 0
		specialStage.nextZone = 0
		stage.activeList = PRESENTATION_STAGE
		stage.listPos = StageName[P - MAIN MENU]
		LoadStage()
	end if
end event


event ObjectDraw
	DrawSpriteScreenXY(0, screen.xcenter, 17)
	DrawSpriteScreenXY(1, screen.xcenter, 17)
end event


event ObjectStartup
	LoadSpriteSheet("LevelSelect/Icons.gif")
	SpriteFrame(-96, 0, 80, 14, 1, 208)
	SpriteFrame(0, 0, 96, 14, 82, 208)
	foreach (TypeName[Stage Menu], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].type = TypeName[Blank Object]
		object[1].type = TypeName[Stage Menu]
		object[1].priority = PRIORITY_ACTIVE
		StageMenu_value3 = player.lives
		player.lives = 1
	next
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
